package cn.xeblog.plugin.game.chess2;


import cn.xeblog.plugin.cache.DataCache;
import cn.xeblog.plugin.game.chess2.enums.AIType;
import cn.xeblog.plugin.game.chess2.enums.Alliance;
import cn.xeblog.plugin.game.chess2.enums.PlayerType;

import javax.swing.*;
import java.awt.*;

/**
 * 游戏设置面板
 */
public class GameCache {
    /**
     * 人类文本
     */
    public static final String HUMAN_TEXT = "人类";
    /**
     * AI文本
     */
    public static final String AI_TEXT = "AI";
    /**
     * 固定的深度文本
     */
    public static final String FIXED_DEPTH_TEXT = "深度(级别):";
    /**
     * 固定的时间文本
     */
    public static final String FIXED_TIME_TEXT = "时间 (秒):";
    /**
     * 最小深度
     */
    public static final int MIN_DEPTH = 1;
    /**
     * 最大尝试
     */
    public static final int MAX_DEPTH = 12;
    /**
     * 最小时间
     */
    public static final int MIN_TIME = 1;
    /**
     * 最大时间
     */
    public static final int MAX_TIME = 180;
    /**
     * 游戏设置实例
     */
    private static final GameCache SETUP = new GameCache();

    /**
     * 红色玩家类型
     */
    private PlayerType redPlayerType = PlayerType.HUMAN;
    /**
     * 黑色玩家类型
     */
    private PlayerType blackPlayerType = PlayerType.HUMAN;
    /**
     * AI玩家类型
     */
    private AIType aiType = AIType.DEPTH;
    /**
     * 检索深度
     */
    private int searchDepth = 5;
    /**
     * 检索时间
     */
    private int searchTime = 10;
    /**
     * 当前AI的移动是否是随机的，true，随机，否则，false
     */
    private boolean isAIRandomised = false;

    private GameCache() {
    }

    /**
     * 获取游戏设置页
     *
     * @return 游戏设置页
     */
    static GameCache getInstance() {
        return SETUP;
    }

    /**
     * 判断所属阵营（红方或黑方）是否为AI玩家
     *
     * @param alliance 所属阵营（红方或黑方）
     * @return true, 是，否则，false
     */
    boolean isAIPlayer(Alliance alliance) {
        return alliance.isRed() ? redPlayerType.isAI() : blackPlayerType.isAI();
    }

    /**
     * AI玩家类型是否限制时间
     *
     * @return true, 限制时间，否则，false
     */
    boolean isAITimeLimited() {
        return aiType.isTimeLimited();
    }

    /**
     * 当前AI的移动是否是随机的
     *
     * @return true，随机，否则，false
     */
    boolean isAIRandomised() {
        return isAIRandomised;
    }

    /**
     * 获取检索深度
     *
     * @return 检索深度
     */
    int getSearchDepth() {
        return searchDepth;
    }

    /**
     * 获取检索时间
     *
     * @return 检索时间
     */
    int getSearchTime() {
        return searchTime;
    }
}

